package com.pig4cloud.pig.module.controller.titleMenu;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.pig4cloud.pig.common.core.util.R;
import com.pig4cloud.pig.common.log.annotation.SysLog;
import com.pig4cloud.pig.common.mybatis.page.PageUtils;
import com.pig4cloud.pig.common.mybatis.page.TableDataInfo;
import com.pig4cloud.pig.module.api.entity.mer.Mer;
import com.pig4cloud.pig.module.api.entity.product.Product;
import com.pig4cloud.pig.module.api.entity.titleMenu.TitleMenuSection;
import com.pig4cloud.pig.module.api.entity.titleMenu.TitleMenuSectionCity;
import com.pig4cloud.pig.module.service.mer.IMerService;
import com.pig4cloud.pig.module.service.product.IProductService;
import com.pig4cloud.pig.module.service.titleMenu.ITitleMenuSectionCityService;
import com.pig4cloud.pig.module.service.titleMenu.ITitleMenuSectionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;

/**
 * 页面的 内容行  每一行 是一条记录Controller
 *
 * @author ruoyi
 * @date 2021-08-11
 */
@Validated
@Api(value = "页面的 内容行  每一行 是一条记录控制器", tags = {"页面的 内容行  每一行 是一条记录管理"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/titleMenu/section")
public class TitleMenuSectionController {

    private final ITitleMenuSectionService titleMenuSectionService;
//    private final ISysDictDataService sysDictDataService;
	private final IMerService merService;
	private final IProductService productService;
	private final ITitleMenuSectionCityService sectionCityService;

	@Value("${ruoyi.imgUrl}")
	private String imgUrl;

//	@Value("${ruoyi.imgUrlOss}")
//	private String imgUrlOss;

    /**
     * 查询页面的 内容行  每一行 是一条记录列表
     */
    @ApiOperation("查询页面的 内容行  每一行 是一条记录列表")
    @PreAuthorize("@pms.hasPermission('module:sections:list')")
    @GetMapping("/list")
    public TableDataInfo<TitleMenuSection> list(@Validated TitleMenuSection titleMenuSection) {
		QueryWrapper<TitleMenuSection> qw = new QueryWrapper<>();
		if(titleMenuSection.getTitleMenuId()!=null){
			qw.eq("title_menu_id",titleMenuSection.getTitleMenuId());
		}
		qw.orderByAsc("sort");
		TableDataInfo<TitleMenuSection> td = PageUtils.buildDataInfo(titleMenuSectionService.page(PageUtils.buildPage(),qw));
		List<TitleMenuSection> list = td.getData();
		if(CollUtil.isNotEmpty(list)){
			list.forEach(section -> {
				if(StrUtil.isNotEmpty(section.getBgUrl())){
					section.setBgPath(imgUrl + section.getBgUrl());
				}
				if(StrUtil.isNotEmpty(section.getTitleImgUrl())){
					section.setTitleImgPath(imgUrl + section.getTitleImgUrl());
				}
//                SysDictData dictData = sysDictDataService.selectDictData("section_type",section.getSectionType());
//				if(dictData!=null){
//				    section.setSectionTypeName(dictData.getDictLabel());
//                }

				if(section.getIsAllCity() == 0){
					QueryWrapper<TitleMenuSectionCity> qwCity = new QueryWrapper<>();
					qwCity.select("id");
					qwCity.eq("menu_section_id",section.getId());
					long cityCount = sectionCityService.count(qwCity);
					section.setCityCount(cityCount);

				}
			});
		}
        return td;
    }
    /**
     * 获取页面的 内容行  每一行 是一条记录详细信息
     */
    @ApiOperation("获取页面的 内容行  每一行 是一条记录详细信息")
    @PreAuthorize("@pms.hasPermission('module:sections:query')")
    @GetMapping("/{id}")
    public R<TitleMenuSection> getInfo(@NotNull(message = "主键不能为空")  @PathVariable("id") Long id) {
		TitleMenuSection section = titleMenuSectionService.getById(id);
		if(section!=null){
			if(StrUtil.isNotEmpty(section.getBgUrl())){
				section.setBgPath(imgUrl + section.getBgUrl());
			}else{
				section.setBgPath("");
			}
			if(StrUtil.isNotEmpty(section.getTitleImgUrl())){
				section.setTitleImgPath(imgUrl + section.getTitleImgUrl());
			}else{
				section.setTitleImgPath("");
			}

			QueryWrapper<Mer> qw = new QueryWrapper<>();
			qw.eq("cate_child_id",section.getCateChildId());
			qw.eq("state",0);
			List<Mer> mers = merService.list(qw);
			for (Mer mer : mers){
				QueryWrapper<Product> qwPro = new QueryWrapper<>();
				qwPro.eq("mer_id",mer.getId());
				qwPro.eq("is_show",1);
				long productCount = productService.count(qwPro);
				mer.setProductCount(productCount);
			}
			section.setMers(mers);
		}
        return R.ok(section);
    }

    /**
     * 新增页面的 内容行  每一行 是一条记录
     */
    @ApiOperation("新增页面的 内容行  每一行 是一条记录")
    @PreAuthorize("@pms.hasPermission('module:sections:add')")
    @SysLog("页面的 内容行  每一行 是一条记录")

    @PostMapping()
    public R<Void> add(@Valid @RequestBody TitleMenuSection titleMenuSection) {
        return R.okByRow(titleMenuSectionService.save(titleMenuSection) ? 1 : 0);
    }

    /**
     * 修改页面的 内容行  每一行 是一条记录
     */
    @ApiOperation("修改页面的 内容行  每一行 是一条记录")
    @PreAuthorize("@pms.hasPermission('module:sections:edit')")
    @SysLog("页面的 内容行  每一行 是一条记录")

    @PutMapping()
    public R<Void> edit(@Valid @RequestBody TitleMenuSection titleMenuSection) {
        return R.okByRow(titleMenuSectionService.updateById(titleMenuSection) ? 1 : 0);
    }


	/**
	 * 修改抖音上下架状态
	 */
	@PreAuthorize("@pms.hasPermission('module:sections:edit')")
	@SysLog("修改抖音上下架状态")
	@PutMapping("/changeShowDyStatus")
	public R changeShowDyStatus(@RequestBody TitleMenuSection titleMenuSection) {
		return R.okByRow(titleMenuSectionService.updateById(titleMenuSection));
	}

    /**
     * 删除页面的 内容行  每一行 是一条记录
     */
    @ApiOperation("删除页面的 内容行  每一行 是一条记录")
    @PreAuthorize("@pms.hasPermission('module:sections:remove')")
    @SysLog("页面的 内容行  每一行 是一条记录")
    @DeleteMapping("/{ids}")
    public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) {
        return R.okByRow(titleMenuSectionService.removeByIds(Arrays.asList(ids)) ? 1 : 0);
    }
}
